package pe.edu.upc.dew.grupo5.dao;

import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;

import pe.edu.upc.dew.grupo5.model.Cine;
import pe.edu.upc.dew.grupo5.model.Funcion;
import pe.edu.upc.dew.grupo5.model.Pelicula;

public class PeliculaDaoJdbc extends SimpleJdbcDaoSupport implements PeliculaDao {
	
	@Override
	public Pelicula getPeliculaPorCodigo(int idPelicula) {
		return getSimpleJdbcTemplate().
		queryForObject("select idPelicula,nombre,genero,fechaEstreno,duracion,pais,director,actor,audiencia,sinopsis,rutaImagen,anio,estreno " +
				"from Pelicula where idPelicula=?",new BeanPropertyRowMapper<Pelicula>(Pelicula.class),idPelicula);
	}

	@Override
	public List<Pelicula> getPeliculas() {
		return getSimpleJdbcTemplate().
		query("select idPelicula,nombre,genero,fechaEstreno,duracion,pais,director,actor,audiencia,sinopsis,rutaImagen,anio,estreno " +
				"from Pelicula ",new BeanPropertyRowMapper<Pelicula>(Pelicula.class));
	}

	@Override
	public void eliminarPelicula(int idPelicula) {
		getSimpleJdbcTemplate().update("delete from Pelicula where idPelicula=?",idPelicula);
	}

	@Override
	public List<Pelicula> getPeliculaPorGenero(String genero) {
		return getSimpleJdbcTemplate().
		query("select idPelicula, nombre, genero, fechaEstreno, duracion, pais, director, actor, audiencia, sinopsis, rutaImagen, anio " +
				"from Pelicula where genero=?",new BeanPropertyRowMapper<Pelicula>(Pelicula.class),genero);
	}

	@Override
	public List<Pelicula> getPeliculaPorCine(int idCine) {
		return getSimpleJdbcTemplate().
		query("select distinct p.idPelicula,p.nombre,p.genero,p.fechaEstreno,p.duracion,p.pais,p.director," +
				"p.actor,p.audiencia,p.sinopsis,p.rutaImagen,p.anio " +
				"from Pelicula p,Funcion,Sala " +
				"where p.idPelicula=Funcion.idPelicula and Funcion.idSala=Sala.IdSala and Sala.idCine=?",new BeanPropertyRowMapper<Pelicula>(Pelicula.class),idCine);
	}

	@Override
	public List<Cine> getCinePorPelicula(int idPelicula) {
		return getSimpleJdbcTemplate().
		query("select distinct Cine.idCine, Cine.nombre, distrito, direccion " +
				"from Pelicula,Funcion,Sala,Cine " +
				"where Pelicula.idPelicula=Funcion.idPelicula and Funcion.idSala=Sala.IdSala and Sala.IdCine=Cine.IdCine and Pelicula.idPelicula=? and funcion.fecha=CURRENT_DATE()",new BeanPropertyRowMapper<Cine>(Cine.class),idPelicula);
	}

	@Override
	public List<Pelicula> getPeliculaEnEstreno() {
		return getSimpleJdbcTemplate().
		query("select idPelicula,nombre,genero,fechaEstreno,duracion,pais,director,actor,audiencia,sinopsis,rutaImagen,anio,estreno " +
				"from Pelicula where estreno=1",new BeanPropertyRowMapper<Pelicula>(Pelicula.class));
	}

	@Override
	public void InsertaPelicula(Pelicula pelicula) {
		getSimpleJdbcTemplate()
		.update("insert into pelicula(nombre,genero,fechaEstreno,duracion,pais,director,actor,audiencia,sinopsis,rutaImagen,anio,estreno) " +
				"values(?,?,?,?,?,?,?,?,?,?,?,?)",
				pelicula.getNombre(),pelicula.getGenero(),pelicula.getFechaEstreno(),pelicula.getDuracion(),pelicula.getPais(),
				pelicula.getDirector(),pelicula.getActor(),pelicula.getAudiencia(),pelicula.getSinopsis(),pelicula.getRutaImagen(),
				pelicula.getAnio(),pelicula.getEstreno());
	}

	@Override
	public List<Pelicula> getPeliculasInicio() {
		return getSimpleJdbcTemplate().
		query("select distinct pelicula.idPelicula,pelicula.nombre,genero,fechaEstreno,duracion,pais,director, actor, audiencia, sinopsis, rutaImagen, anio " +
				"from Pelicula,Funcion,Sala " +
				"where Pelicula.idPelicula=Funcion.idPelicula and Funcion.idSala=Sala.IdSala and Pelicula.estreno=0 limit 10",new BeanPropertyRowMapper<Pelicula>(Pelicula.class));
	}

	@Override
	public List<Pelicula> getProximosEstrenos() {
		return getSimpleJdbcTemplate().
		query("select idPelicula,nombre,genero,fechaEstreno,duracion,pais,director,actor,audiencia,sinopsis,rutaImagen,anio,estreno " +
				"from Pelicula where estreno=2",new BeanPropertyRowMapper<Pelicula>(Pelicula.class));
	}

	@Override
	public List<Funcion> getHorarioDePelicula(Integer idCine, Integer idPelicula) {
		return getSimpleJdbcTemplate().
		query("select * from funcion where idPelicula=? and idSala in (select idSala from sala where idCine=?) and fecha=CURRENT_DATE()",new BeanPropertyRowMapper<Funcion>(Funcion.class),idPelicula,idCine);
	}
	
}
